Compiler Explorerで学ぶArmアセンブラ
https://gyazo.com/e8f6bcc2d505fe5962160aa55ad830e6
Compiler Explorer
Compiler Explorer にC言語を食わせて ARM64 gcc の出力結果を眺めてみるよ。
確認ポイント
関数の戻り値の返し方
関数への引数の渡し方
スタックポインタの操作
関数の戻り値の返し方
関数からの戻り値のかえし方を確認。
戻り値は w0 (32bit) または x0 (64bit) に入れて返す
return int
ハードコードされた 0 (int型) を返すプログラム。
code:return_0.c
int main() {
return 0;
}
intは32ビットなので、32ビットレジスタの w0 に 0 をセットしてリターンする。
code:return_0.s
main:
mov w0, 0
ret
return long
ハードコードされた 255 (long型) を返すプログラム。
code:return_int.c
long foo() {
return 255;
}
int main() {
foo();
return 0;
}
32ビットの w0 の代わりに64ビットの x0 が使われている。
code:return_long.s
foo:
mov x0, 255
ret
main:
mov x29, sp
bl foo
mov w0, 0
ret
(つづく)